﻿using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Util
{
    public class SwaggerDefaultValues: IOperationFilter
    {
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            var returnType = context.MethodInfo.ReturnType;

            //if (returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(ResultMsg<>))
            //{
            //    var dataItemType = returnType.GetGenericArguments()[0];

            //    // 获取SchemaRegistry
            //    var schemaRegistry = context.SchemaRepository; // 在较新版本的Swashbuckle.AspNetCore中，可能是context.SchemaGenerator.SchemaRepository

            //    // 注册或获取dataItemType的Schema
            //    var dataSchema = schemaRegistry.RegisterType(dataItemType);
            //    //var dataItemType = returnType.GetGenericArguments()[0];

            //    //// 使用SchemaRegistry来获取dataItemType的Schema  
            //    //var dataSchema = context.SchemaRegistry.GetOrRegister(dataItemType);

            //    // 添加200响应  
            //    operation.Responses.Add("200", new OpenApiResponse
            //    {
            //        Description = "Success",
            //        Content = new Dictionary<string, OpenApiMediaType>
            //    {
            //        {
            //            "application/json", new OpenApiMediaType
            //            {
            //                Schema = new OpenApiSchema
            //                {
            //                    Type = "object",
            //                    Properties = new Dictionary<string, OpenApiSchema>
            //                    {
            //                        { "success", new OpenApiSchema { Type = "boolean" } },
            //                        { "message", new OpenApiSchema { Type = "string" } },
            //                        { "totalCount", new OpenApiSchema { Type = "integer", Format = "int64" } },
            //                        { "data", new OpenApiSchema
            //                            {
            //                                Type = "array",
            //                                Items = new OpenApiSchema
            //                                {
            //                                    Reference = new OpenApiReference
            //                                    {
            //                                        Type = ReferenceType.Schema,
            //                                        Id = dataSchema.Reference.Id // 使用注册的Schema Id  
            //                                    }
            //                                }
            //                            }
            //                        }
            //                    }
            //                }
            //            }
            //        }
            //    }
            //    });
            //}
        }
    }
}
